﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Extensions;
using Aker.DevTeam;

namespace Aker.Uretim
{
    public class Kod
    {
        public string PartiNo = "";
        public string OnEk = "";
        public string Renk = "";
        public string SiraNo = "";
        public string Yil = "";
        public int Padding;
        public string KodPartisiz
        {
            get
            {
                return OnEk + Yil + SiraNo.PadLeft(Padding, '0') + (Renk != "" ? "-" : "") + Renk;
            }
        }

        public string KodPartili
        {
            get
            {
                return OnEk + Yil + SiraNo.PadLeft(Padding, '0') + (Renk + PartiNo != "" ? "-" : "") + Renk + PartiNo;
            }
        }

        public string KodRenksizPartisiz
        {
            get
            {
                return OnEk + Yil + SiraNo.PadLeft(Padding, '0');
            }
        }

        public Kod()
        { }

        public Kod(string Kod)
        {
            Init(Kod);
        }

        private void Init(string Kod)
        {
            if (Kod.Split('-').Length > 1)
            {
                string sagKod = Kod.Split('-')[1];

                foreach (Char c in sagKod)
                {
                    if (!Char.IsDigit(c))
                        Renk += c;
                    else
                        PartiNo += c;
                }
            }

            if (Kod.StartsWith("10.") || Kod.StartsWith("20."))
            {
                SiraNo = Kod.Substring(5, 3); // 20.15200-A1 --> 200
                OnEk = Kod.Substring(0, 3);
                Yil = Kod.Substring(3, 2);
                Padding = 3;
            }
            else if (Kod.StartsWith("11.") || Kod.StartsWith("12.") || Kod.StartsWith("30."))
            {
                SiraNo = Kod.Substring(5, 3); // 11.15200-A1 --> 200
                OnEk = Kod.Substring(0, 3);
                Yil = Kod.Substring(3, 2);
                Padding = 3;
            }
            else
            {
                SiraNo = Kod.Substring(0, 4);
                Padding = 4;
            }

            if (this.PartiNo == "")
                PartiNo = "1";
        }

        internal Kod Copy()
        {
            Kod copy = new Kod();
            copy.PartiNo = this.PartiNo;
            copy.OnEk = this.OnEk;
            copy.Renk = this.Renk;
            copy.SiraNo = this.SiraNo;
            copy.Yil = this.Yil;

            return copy;
        }

        public Kod PartiNoArtir() //Aynısından , eski yıl
        {
            Kod copy = Copy();
            copy.PartiNo = (copy.PartiNo.ToIntNN(0) + 1).ToString();
            return copy;
        }

        public Kod SiraNoArtir() //Yeni üretim , yeni yıl
        {
            Kod copy = Copy();
            copy.SiraNo = (copy.SiraNo.ToIntNN() + 1).ToStringNN().PadLeft(3, '0');
            copy.Renk = "A";
            copy.PartiNo = "1";
            if (copy.KodRenksizPartisiz.StartsWith("10.") || copy.KodRenksizPartisiz.StartsWith("20."))
                copy.Yil = DateTime.Now.Year.ToString().Substring(2, 2);

            else if (copy.KodRenksizPartisiz.StartsWith("11.") || copy.KodRenksizPartisiz.StartsWith("12.") || copy.KodRenksizPartisiz.StartsWith("30."))
                copy.Yil = DateTime.Now.Year.ToString().Substring(2, 2);


            return copy;
        }

        public Kod RenkOlustur() //Renk oluştur , eski yıl
        {
            Kod copy = Copy();
            if (copy.Renk == "")
                copy.Renk = "A";
            else
                copy.Renk = ((char)(Renk.ToCharArray()[0] + 1)).ToString();
            copy.PartiNo = "1";
            return copy;
        }
    }
}
